package br.com.tcc.gp.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.tcc.gp.Interfaces.InterfaceCela;
import br.com.tcc.gp.modelo.Cela;
import br.com.tcc.gp.util.DBConnector;

public class CelaDAO implements InterfaceCela {

	private Connection con;
	private PreparedStatement ps;
	private List<Cela> lista;
	int linhas;

	public static final String TABELA = "cela";
	public static final String ID = "codigo";
	public static final String CAPACIDADE = "capacidade";
	public static final String NIVEL = "nivel";
	public static final String SEQUENCIA = "seq_cela";

	public CelaDAO() {
		try {
			con = DBConnector.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Conexao Falhou");
		}
	}

	public int salvar(Cela cela){
		try {
			String sql = "INSERT INTO " + TABELA+"(codigo, capacidade, nivel ) "+
						 "values ("+ SEQUENCIA + ".NEXTVAL, ? , ?)";
			ps = con.prepareStatement(sql);
			ps.setInt(1, cela.getCapacidade());
			ps.setInt(2, cela.getNivel());
			linhas = ps.executeUpdate();
			con.commit();
			return linhas;
		} catch (SQLException exception) {
			exception.printStackTrace();
		}
		return 0;
	}

	public List<Cela> listar(){
		try {

			String sql = "SELECT " + ID + " , " + CAPACIDADE + ", " + NIVEL	+ " FROM cela";

			ps = con.prepareStatement(sql);
			ResultSet resultado = ps.executeQuery();
			lista = new ArrayList<Cela>();

			while (resultado.next()) {
				Cela cela = new Cela();
				cela.setCodigo(resultado.getInt(ID));
				cela.setCapacidade(resultado.getInt(CAPACIDADE));
				cela.setNivel(resultado.getInt(NIVEL));
				lista.add(cela);
			}
		} catch (SQLException exception) {
			exception.printStackTrace();
		}
		return lista;
	}

	public int alterar(Cela cela){
		try{
			String sql = "UPDATE cela SET capacidade = ? , nivel = ? WHERE codigo = ?";		
			ps = con.prepareStatement(sql);
			ps.setInt(1, cela.getCapacidade());
			ps.setInt(2, cela.getNivel());
			ps.setInt(3, cela.getCodigo());
			int linha = ps.executeUpdate();
			con.commit();
		return linha;
		} catch (SQLException exception) {
			exception.printStackTrace();
		}
		return 0;
	}

	public int deletar(int codigo){
		try{
			String sql = "DELETE FROM " + TABELA + " WHERE " + ID + " = ?";

			ps = con.prepareStatement(sql);
			ps.setInt(1, codigo);
			int linhas = ps.executeUpdate();
			con.commit();
			return linhas;
		} catch (SQLException exception) {
			exception.printStackTrace();
		}
		return 0;
	}

	public Cela pesquisar(int codigo){
		try{

		String sql = "SELECT c."+ ID+ ", c."+ CAPACIDADE+ " , c."+ NIVEL+ " FROM cela c WHERE c.codigo = ?";

		ps = con.prepareStatement(sql);
		ps.setInt(1, codigo);
		ResultSet resultado = ps.executeQuery();

		Cela cela = new Cela();
		while (resultado.next()) {
			cela.setCodigo(resultado.getInt(ID));
			cela.setCapacidade(resultado.getInt(CAPACIDADE));
			cela.setNivel(resultado.getInt(NIVEL));
		}
		return cela;		
		} catch (SQLException exception) {
			exception.printStackTrace();
		}
		return null;
	}

}